FileReference
- 2010 年 2月 25 日
jpgやpng、mp3などをダウンロードさせたい時、navigateToURLで直接URLを指定するとブラウザのウインドウに表示さる。ブラウザのウインドウに表示せずダウンロードさせるにはFileReferenceが有効だ。
参考:FileReference – ActionScript 3.0 言語およびコンポーネントリファレンス
例:画像ファイルをダウンロードする
private function _onMouseDown(e:MouseEvent):void{ var req:URLRequest = new URLRequest( "http://blog.nipx.jp/wp-content/uploads/2009/09/ceocle.jpg" ); var file:FileReference = new FileReference(); file.download( req ); } |
先日、これを使ってつまづいたところをメモしておく。よく読めばリファレンスに記載があったのだが…。
・認証がある場合、ブラウザからでないとダウンロードできない。
認証がある場合、Flashでパブリッシュした後の画面やスタンドアローンプレイヤーではダウンロードが失敗する。ブラウザで表示している場合、認証の入力画面が表示され認証可能。
仕事の場合、開発用のサーバーには大抵Basic認証がかかっていますがいちいちブラウザで確認するのは手間なので、パブリッシュの画面からダウンロードできないか試してみたのだけどダメっぽい。Basic認証を抜けるにはリクエストヘッダを送る方法が知られているけど、FileReferenceでは追加したリクエストヘッダ自体が無視されるようだ。
リファレンス download()メソッドより引用
サーバーでユーザー認証が必要な場合、ブラウザ内で実行される、つまり、ブラウザプラグインまたは ActiveX コントロールを使用する SWF ファイルでのみ、認証用のユーザー名とパスワードをユーザーが入力できるダイアログボックスを表示できます。〜
〜 URLRequest オブジェクトの requestHeaders プロパティは無視されるため、カスタム HTTP リクエストヘッダはアップロードまたはダウンロードでサポートされません。
FileReferenceを使う場合、ダウンロード状況を表示する演出なんか入れることありそうなんで、開発上ちょっと面倒だなぁと思う。ところでこのFileReference、Player 10以上ではFlashで生成したデータを保存させることが出来る。AirならFileで出来ると知っていたがFlash PlayerでもFileReferenceで保存できるようになっていたんですね。saveのdata引数にはByteArrayが渡せるのでどんなファイル形式でも保存出来るようだ。
private function _onMouseDown(e:MouseEvent):void{ var file:FileReference = new FileReference(); file.save( "FileReferenceでテキストデータを保存。", "sample.txt" ); } |